// 购物车列表的 store
import {computed, ref} from 'vue'
import {defineStore} from 'pinia'
import {useUserStore} from './userStore'
import {reqFindNewCartListAPI, reqDeleteCartAPI, reqMergeCartAPI} from '@/api/cart'
import {ElMessage} from "element-plus";

export const useCartStore = defineStore('cartStore', () => {
    // 引入 userStore
    const userStore = useUserStore()
    // 计算是否登录
    const isLogin = computed(() => {
        return userStore.userInfo.token
    })
    // 1. 定义state - cartList
    // 获取最新购物车列表
    const cartList = ref([])
    const updateNewList = async () => {
        try {
            const res = await reqFindNewCartListAPI()
            cartList.value = res.data.result
        } catch (error) {
            console.error('获取购物车列表失败:', error)
        }
    }
    // 2. 定义action - 增加删除购物车：addCart, deleteCart
    // 增加购物车商品
    // 删除购物车商品
    const deleteCart = async (skuId) => {
        if (isLogin.value) {
            try {
                const res = await reqDeleteCartAPI([skuId])
                // 1. 找到要删除项的下标值 - splice
                // 2. 使用数组的过滤方法 - filter
                const index = cartList.value.findIndex(item => item.skuId === skuId)
                cartList.value.splice(index, 1)
                console.log('删除购物车成功', skuId)
                await updateNewList()
            } catch (error) {
                console.error('删除购物车失败:', error)
            }
        } else {
            ElMessage.error('用户未登录！')
        }
    }

    // 清除购物车所有
    const clearCart = () => {
        cartList.value = []
    }


    // 计算所有总钱数
    // 1. 总数 所有项的count之和; 2. 总价 所有项的count*price之和
    const allPrice = computed(() => {
        let totalCount = 0
        let totalPrice = 0
        // 遍历所有项
        cartList.value.forEach(item => {
            totalCount += item.count
            totalPrice += item.count * item.price
        })
        return {
            totalCount,
            totalPrice
        }
    })

    // 3. 已选择数量
    const selectedCount = computed(() => cartList.value.filter(item => item.selected).reduce((a, c) => a + c.count, 0))

    // 4. 已选择商品价钱合计
    const selectedPrice = computed(() => cartList.value.filter(item => item.selected).reduce((a, c) => a + c.count * c.price, 0))

    // 返回需要暴露的状态和方法
    return {
        cartList,
        isLogin,
        updateNewList,
        deleteCart,
        clearCart,
        allPrice,
        selectedCount,
        selectedPrice,

    }
})